package com.manage.system.api.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.manage.common.core.result.JsonResult;
import com.manage.system.api.dto.SysRoleDto;
import com.manage.system.api.entity.SysRole;
import com.manage.system.api.request.role.RoleAddOrUpdateParam;
import com.manage.system.api.request.role.RolePermissionParam;
import com.manage.system.api.request.role.RoleQueryParam;

import java.util.List;

/**
 * <p>
 * 系统角色表 服务类
 * </p>
 *
 * @author zhangqing
 * @since 2021-03-05
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * 获取当前登录人所在租户下所有角色未删除的并且状态为正常
     *
     * @return 角色信息集合
     */
    List<SysRole> findAllRole();

    /**
     * 查询角色详情
     * @param roleId 角色ID
     * @return 角色信息
     */
    JsonResult roleDetails(Long roleId);

    /**
     * 分页查询role列表
     *
     * @param roleQueryParam 查询参数实体
     * @return 统一响应
     */
    JsonResult list(RoleQueryParam roleQueryParam);

    /**
     * 添加角色
     *
     * @param roleAddOrUpdateParam 角色实体类
     * @return 统一响应
     */
    JsonResult add(RoleAddOrUpdateParam roleAddOrUpdateParam);

    /**
     * 检查角色代码是否存在
     *
     * @param roleCode 角色code
     * @param tenantCode 租户code
     * @return 存在返回true, 否则返回false
     */
    Boolean checkRoleCode(String roleCode,String tenantCode);

    /**
     * 编辑角色
     *
     * @param roleAddOrUpdateParam 角色实体类
     * @return 统一响应
     */
    JsonResult edit(RoleAddOrUpdateParam roleAddOrUpdateParam);

    /**
     * 新增/编辑 角色权限
     *
     * @param sysRoleDto 数据
     * @return 统一响应
     */
    JsonResult roleAuthority(SysRoleDto sysRoleDto);

    /**
     * 更新角色状态(启用/禁用)
     * @param id 角色ID
     * @param status 启用/禁用
     * @return 统一响应
     */
    JsonResult changeRoleStatus(Long id, Boolean status);

    /**
     *
     * @param ids 角色id集合
     * @return 统一响应
     */
    JsonResult batchDelRole(List<Long> ids);

    /**
     * 角色权限设置
     * @param rolePermissionParam 角色权限参数实体
     * @return 统一响应
     */
    JsonResult permission(RolePermissionParam rolePermissionParam);
}
